package thread;

import gare.Gare;

/**
 * Le rôle Thread pour accéder la gare. Le rôle Objet partagée pour que les
 * voyageurs puissent monter.
 */
public class Train extends Thread {

	public static int CAPACITE_TRAIN = 50;

	public static int ARRET_TRAIN = 15000;

	/**
	 * Compris entre 50 et 300
	 */
	public static int VITESSE_TRAIN = (int) (Math.random() * (300 - 50)) + 50;
	/**
	 * Nombre de place disponbile maximum
	 */
	private int nombrePlaceDisponible;

	/**
	 * Nombre de place réservé à partir de l'espace vente
	 */
	private int nombrePlaceReservee = 0;

	/**
	 * Nombre de voyageur monté
	 */
	private int nombreVoyageur = 0;

	private Gare desination;

	private int numeroTrain;

	private boolean etatArreter;

	public Train(int num, Gare gare) {
		numeroTrain = num;
		nombrePlaceDisponible = (int) (Math.random() * CAPACITE_TRAIN);
		this.desination = gare;
		etatArreter = false;
	}

	public void setDestination(Gare gare) {
		this.desination = gare;
	}

	public void run() {
		try {
			sleep(10000 / VITESSE_TRAIN);
			desination.getEspaceQuai().accueillirTrain(this);
			sleep(ARRET_TRAIN);
			arreterReservation();
			desination.getEspaceQuai().sortirTrain(this);

		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public int getNbPlaceDisponible() {
		return nombrePlaceDisponible;
	}

	public void reserverPlace() {
		nombrePlaceReservee++;
	}

	public int getNombreReservation() {
		return nombrePlaceReservee;
	}

	public int getNombreVoyageur() {
		return nombreVoyageur;
	}

	public void monter(Voyageur voyageur) {
		nombreVoyageur++;
		System.out.println(voyageur.toString() + "a monté sur "
				+ this.toString());
	}

	public String toString() {
		return "Train[" + numeroTrain + "]";
	}

	public void arreterReservation() {
		etatArreter = true;
	}

	public boolean getetatArreter() {
		return etatArreter;
	}

}
